//package com.cenxi.utils;
//
//import com.cenxi.dao.entity.MinioInfo;
//import io.minio.*;
//import lombok.SneakyThrows;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.ByteArrayInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.net.URLEncoder;
//import java.nio.charset.StandardCharsets;
//import java.util.Objects;
//import java.util.UUID;
//
//@Slf4j
//@Component
//public class MinioUtils {
//
//    @Autowired
//    private MinioClient minioClient;
//
//    @Autowired
//    private MinioInfo minioInfo;
//
//
//    /**
//     * 上传文件
//     *
//     * @param file       文件信息
//     * @param bucketName minio bucket 名称
//     * @return 上传文件路径
//     */
//    public String uploadFile(MultipartFile file, String bucketName) {
//        if (file == null || file.getSize() == 0) {
//            log.error("minio 上传文件：{}", "上传文件不能为空");
//            return null;
//        }
//        try {
//            // 判断是否存在
//            createBucket(bucketName);
//            // 原文件名
//            String originalFilename = file.getOriginalFilename();
//            if (Objects.nonNull(originalFilename)) {
//                originalFilename = uuid() + "_" +originalFilename.replaceAll(" ", "");
//            }
//            minioClient.putObject(
//                    PutObjectArgs.builder().bucket(bucketName).object(originalFilename).stream(
//                            file.getInputStream(), file.getSize(), -1)
//                            .contentType(file.getContentType())
//                            .build());
//            return minioInfo.getDomain() + "/" + bucketName + "/" + originalFilename;
//        } catch (Exception e) {
//            log.error("minio 上传失败：{}", e.getMessage());
//        }
//        log.error("minio 上传文件：{}", "上传失败");
//        return null;
//    }
//
//    /**
//     * 通过字节流上传
//     *
//     * @param imageFullPath 图片路径
//     * @param bucketName    minio bucket 名称
//     * @param imageData     图片数据
//     * @return 上传文件路径
//     */
//    public String uploadImage(String imageFullPath,
//                              String bucketName,
//                              byte[] imageData) {
//        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageData);
//        try {
//            //判断是否存在
//            createBucket(bucketName);
//            minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(imageFullPath)
//                    .stream(byteArrayInputStream, byteArrayInputStream.available(), -1)
//                    .contentType(".jpg")
//                    .build());
//            return minioInfo.getEndpoint() + "/" + bucketName + "/" + imageFullPath;
//        } catch (Exception e) {
//            log.error("minio 上传失败：{}", e.getMessage());
//        }
//        log.error("minio 上传失败：{}", "上传失败");
//        return null;
//    }
//
//    /**
//     * 删除文件
//     *
//     * @param bucketName minio bucket 名称
//     * @param fileName 文件名
//     * @return
//     */
//    public Boolean removeFile(String bucketName, String fileName) {
//        try {
//            //判断桶是否存在
//            boolean res = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
//            if (res) {
//                //删除文件
//                minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName)
//                        .object(fileName).build());
//            }
//        } catch (Exception e) {
//            log.error("minio 删除文件失败");
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    /**
//     * 下载文件
//     *
//     * @param fileName 文件名
//     * @param bucketName minio bucket 名称
//     * @param response 请求响应
//     */
//    public void fileDownload(String fileName,
//                             String bucketName,
//                             HttpServletResponse response) {
//
//        InputStream inputStream = null;
//        OutputStream outputStream = null;
//        try {
//            if (StringUtils.isBlank(fileName)) {
//                response.setHeader("Content-type", "text/html;charset=UTF-8");
//                String data = "文件下载失败";
//                OutputStream ps = response.getOutputStream();
//                ps.write(data.getBytes(StandardCharsets.UTF_8));
//                return;
//            }
//
//            outputStream = response.getOutputStream();
//            // 获取文件对象
//            inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
//            byte[] buf = new byte[1024];
//            int length = 0;
//            response.reset();
//            response.setHeader("Content-Disposition", "attachment;filename=" +
//                    URLEncoder.encode(fileName.substring(fileName.lastIndexOf("/") + 1), "UTF-8"));
//            response.setContentType("application/octet-stream");
//            response.setCharacterEncoding("UTF-8");
//            // 输出文件
//            while ((length = inputStream.read(buf)) > 0) {
//                outputStream.write(buf, 0, length);
//            }
//            log.info("下载成功");
//            inputStream.close();
//        } catch (Throwable ex) {
//            response.setHeader("Content-type", "text/html;charset=UTF-8");
//            String data = "文件下载失败";
//            try {
//                OutputStream ps = response.getOutputStream();
//                ps.write(data.getBytes(StandardCharsets.UTF_8));
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        } finally {
//            try {
//                if (inputStream != null && outputStream != null) {
//                    outputStream.close();
//                    inputStream.close();
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//    @SneakyThrows
//    public void createBucket(String bucketName) {
//        // 不存在就创建
//        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
//            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
//        }
//    }
//
//    public String uuid() {
//        return UUID.randomUUID().toString().replaceAll("-", "");
//    }
//}
